package arithmetic.leecode_arthmetic;

import java.util.Arrays;

/**
 *  合并两个有序数组
 *  给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2，
 *  另有两个整数 m 和 n ，分别表示 nums1 和 nums2 中的元素数目。
 *  请你 合并 nums2 到 nums1 中，使合并后的数组同样按 非递减顺序 排列。
 * 注意：最终，合并后数组不应由函数返回，而是存储在数组 nums1 中。
 * 为了应对这种情况，nums1 的初始长度为 m + n，其中前 m 个元素表示应合并的元素，后 n 个元素为 0 ，应忽略。
 * nums2 的长度为 n 。
 * 网站地址：<a href="https://vip.tulingxueyuan.cn/p/t_pc/course_pc_detail/video/v_61a3466fe4b0cc47c3c0389f?product_id=p_61a34550e4b00db3cebd71f6&content_app_id=&type=6">...</a>
 */
public class Solution88 {

    public static void main(String[] args) {
        Solution88 solution88 = new Solution88();
        int [] num1 = new int[]{1};
        int [] num2 = new int[]{};
        solution88.merge(num1,1,num2,num2.length);
    }

    public void merge(int[] nums1, int m, int[] nums2, int n) {
        int [] temp = new int[n+m];

        int nIndex = 0;
        int mIndex = 0;
        int currentIndex = 0;
        while(currentIndex<(n+m)){
            //数组1取完了 直接将数组2放到后面
            if(mIndex >= m){
                temp[currentIndex] = nums2[nIndex++];
            }else if(nIndex >= n){
                temp[currentIndex] = nums1[mIndex++];
            }
            else if(nums1[mIndex] > nums2[nIndex]){
                temp[currentIndex] = nums2[nIndex];
                nIndex++;
            }else{
                temp[currentIndex] = nums1[mIndex];
                mIndex++;
            }
            currentIndex++;
        }
        for(int i = 0;i<nums1.length;i++){
            nums1[i] = temp[i];
        }

        System.out.println("out:" + Arrays.toString(temp));
    }
}
